掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在thinkphp5升級(jí)為了thinkphp6后,發(fā)現(xiàn)一些文章內(nèi)頁的富文本區(qū)域直接顯示的是html源代碼,而沒有解析,查看頁面源碼發(fā)現(xiàn)html是被轉(zhuǎn)義成實(shí)體了。如圖所示:
雖然內(nèi)容本身在數(shù)據(jù)庫存儲(chǔ)的時(shí)候是被轉(zhuǎn)成實(shí)體了,但是在輸出給模板前已經(jīng)通過htmlspecialchars_decode處理了,按理應(yīng)該不會(huì)這樣。但是實(shí)際上,從thinkphp5.1開始thinkphp自帶的模板引擎think-template會(huì)“自作主張”在解析模板的時(shí)候使用htmlentities方法進(jìn)行全部字符實(shí)體化。如下圖就是thinkphp自帶模板引擎解析模板文件生成的原生php代碼:
實(shí)際上從thinkphp5開始thinkphp官方號(hào)稱就是面向API應(yīng)用開發(fā);隨著現(xiàn)在技術(shù)模式的演進(jìn),越來越多的web應(yīng)用開始采用前后端分離的方式,因此在thinkphp6默認(rèn)情況下是不支持模板引擎的,需要手動(dòng)按照模板引擎think-template。如下是官方關(guān)于視圖(也就是傳統(tǒng)的模板)的說明:
基本的原理已經(jīng)清楚了,那就是新版的thinkphp模板引擎在解析模板文件為原生php代碼的時(shí)候,會(huì)自行對(duì)echo的內(nèi)容進(jìn)行htmlentities處理,那么解決這個(gè)問題的辦法就是消除htmlentities方法的影響。以下提供幾個(gè)方法來解決這個(gè)問題:
1、使用{$content|raw}(推薦這種方式,簡(jiǎn)單明了)
這個(gè)方法的作用就是告訴模板引擎別給我瞎加htmlentities來處理,這樣解析出來的原始代碼就沒有強(qiáng)制加上htmlentities方法,自然就按照后端給的是什么內(nèi)容就輸出原始的內(nèi)容;加上raw就是袁術(shù)內(nèi)容輸出的意思。如下圖加上raw解析的就沒有
2、原生php代碼輸出內(nèi)容
這樣模板引擎就不會(huì)去解析這部分代碼,自然也就不會(huì)私自添加htmlentities方法來處理內(nèi)容了。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流